package com.brave.base;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 2019年5月18日 08:17:38
 * 对象参数检查工具
 * 
 */
public class CheckNullParamKit
{
    public static Map<String, String> checkParam(Object obj)
    {
        Map<String, String> resultMap = new HashMap<>();
        try
        {
            Class cls = obj.getClass();
            Field[] fields = cls.getDeclaredFields();//.getFields();
            //当前参数携带注解的是
            for(Field field : fields)
            {
                field.setAccessible(true);
                if(null != field.getAnnotation(MustNotBeNull.class))
                {
                    boolean value = field.getAnnotation(MustNotBeNull.class).value();
                    if(value)
                    {
                        Class fieldClass = field.getType();
                        //字符串
                        if(fieldClass == String.class)
                        {
                            Object val = field.get(obj);
                            if(null == val || "".equals(val.toString()))
                            {
                                resultMap.put(field.getName(), String.format("%s:%s", field.getName(), "参数不可为空."));
                            }
                        }
                        //整型数字
                        if(fieldClass == int.class)
                        {
                            int val = (int) field.get(obj);
                            if(0 >= val)
                            {
                                resultMap.put(field.getName(), String.format("%s:%s", field.getName(), "参数不可为0或小于0."));
                            }
                        }
                        //长整型数字
                        if(fieldClass == Long.class)
                        {
                            long val = (long) field.get(obj);
                            if(0 >= val)
                            {
                                resultMap.put(field.getName(), String.format("%s:%s", field.getName(), "参数不可为0或小于0."));
                            }
                        }
                        //集合
                        if(fieldClass == List.class)
                        {
                            List val = (List) field.get(obj);
                            if(null == val || 0 == val.size())
                            {
                                resultMap.put(field.getName(), String.format("%s:%s", field.getName(), "参数不可为空."));
                            }
                        }
                        //高精度计算型
                        if(fieldClass == BigDecimal.class)
                        {
                            BigDecimal val = (BigDecimal) field.get(obj);
                            if(BigDecimal.ZERO.compareTo(val) <= 0)
                            {
                                resultMap.put(field.getName(), String.format("%s:%s", field.getName(), "参数不可为0或小于0."));
                            }
                        }
                    }
                }
            }
        }catch(Throwable ta)
        {
//            ex.printStackTrace();
        }
        return resultMap;
    }
}